當我們有大量刪除table資料的需求時,如果傻傻的用delete會發現執行得非常之慢,一兩百萬筆資料大概就要執行個半小時。
這時我們就可以利用truncate的DDL語句來做到大量刪除資料的效果:
truncate table 'YOUR_TABLE_NAME'
執行這句後,整張table的資料會在彈指之間直接被清空。但我們通常沒有要清的這麼乾淨,還是有需要保留的資料怎麼辦?
很直覺地,我們會想到可以建一張column都一樣table來暫存要保留的資料,在truncate完本尊後insert回去就搞定了~
到這邊就是我寫這邊文章最想分享的地方了,因為當我們要建立table的時候,會很麻煩地要把各個column定義出來:
create table YOUR_TABLE_NAME(
NAME varchar(10),
AMOUNT int,
FLAG bit,
...
)
是不是很麻煩,就算透過各家DB的UI工具去產生table create sql,那也是要去複製出來搞一搞?怎麼樣這套做法都得多搞一個步驟出來去定義table,太麻煩了。
這時候就有個很讚的語法,通常會搭配temperary table服用:
-- sql server syntax
select * into #YOUR_TABLE_NAME from YOUR_TABLE_NAME where ...
就這樣!搞定了。透過這個語法我們就做到了保留資料跟創建table,超舒服。當然因為我現在工作上是用sql server,可以直接套用在temp table,或許其他DB應該也會有類似的語法可用。
或者也可以使用以下語法:
create table TEMP_TABLE_NAME as (select * from YOUR_TABLE_NAME)
也可以做到建立table的同時複製資料,並不用再定義繁瑣的column設定。